<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 
    ！注意写上题目题数
    例如 ：
    1、选择题
        (1) A
        (2) C
        (3) true    false   false
        (4) A
        (5) A
      
    2、填空题
        第1题
            (1)获取节点方法：
                (1) querySelector
                (2) getElementById
                (3) querySelectorAll
                (4) getElementsByClassName
                (5) getElementsByTagName
                (6) getElementsByName

            (2)创建节点方法
                (1) createElement
                (2) createTextNode

            (3)添加节点方法
                (1) appendChild
                (2) insertBefore
                (3) innerHTML

        第2题
            object.constructor.prototype

            fn.constructor.prototype
            fn.prototype.__proto__

            array.constructor.prototype
            array.constructor.prototype.__proto__

            Function.prototype
            Array.constructor.prototype
            Object.constructor.prototype
            
            true.constructor.prototype

            Function.__proto__.__proto__

    3、描述题
        第 1 题
            ajax就是Async JavaScript and XML,就是异步的JavaScript和XML，可以在不重选加载页面的情况下，与服务器交换数据，并实现部分页面的更新。通过XmlHttpRequest对象来向服务器发异步请求，从服务器获得数据，然后用JavaScript来操作DOM而更新页面。

        第 2 题
             在函数中，this表示全局对象，在函数中使用时，this指向函数的所属者Fn，Fn默认绑定在了this上
             普通函数的this，this谁调用就指向谁
             如果函数是直接执行的，没有其他的对象进行.调用，那么this指向的是window, 如果是某个对象进行.调用的函数，this会指向那个对象(默认情况下)
            
        第 3 题
            event loop是一个事件循环机制，是解决JavaScript单线程运行时不会阻塞的一种机制，单线程任务分为同步任务和异步任务，在js中任务被分为宏任务和微任务，在浏览器中，所有的任务都会被放到调用栈等待主线程执行

        第 4 题
            每个函数都有prototype(原型)属性，这个属性是一个指针，指向一个对象，这个对象的用途是包含特定类型的所有实例共享的属性和方法，即这个原型对象是用来给实例共享属性和方法的。
            而每个实例内部都有一个指向原型对象的指针。
            __proto__就是原型链。
            原型就是能放公用方法、属性的地方
            原型链方便代码自己去调用共享每种数据类型（对象）的方法、属性的链子。

    4、描述题 
        第 1 题
            Goodbye Jack
        第 2 题
            10
        第 3 题
            21
        第 4 题
            667
        第 5 题
            Jack
        第 6 题
            Jack  HanMeiMei
            undefined
        第 7 题
            1   
            报错

    -->
    <!-- 5.实操题 -->
    <!-- 第 1 题 -->
    <!-- <script>
        // ES5
        function Person(name, age, six) {
            this.name = name;
            this.age = age;
            this.six = six;
        }

        Person.prototype.sayName = function() {
            console.log(this.name);
        }

        var person1 = new Person("嘿嘿", "11", "男");
        var person2 = new Person("哈哈", "22", "男");

        person1.sayName(); //输出"嘿嘿"
        console.log(person2.name) //输出“哈哈”

        // ES6创建类
        class Person1 {
            constructor(name, age, six) {
                this.name = name;
                this.age = age;
                this.six = six;
            }
        }
        let a = new Student("啦啦", "33", "男")
        console.log(a)
    </script> -->
    <!-- 第 2 题 -->
    <!-- <script>
        function ajax(_url, _data, _method) {
            // GET请求为默认请求
            let method = _method || "GET";
            // GET请求就直接默认是null
            let data = _data || null;
            // 返回Prmoise对象
            return new Promise((resolve, reject) => {
                // 实例化一个XMLHttpRequest对象
                let xhr = new XMLHttpRequest();

                if (method.toUpperCase() == "GET") {
                    let str = "?";
                    // 处理get请求的参数
                    for (let k in data) {
                        str += `${k}=${data[k]}&`;
                    };
                    str = str.slice(0, -1);
                    xhr.open(method, _url + str);
                } else {
                    xhr.open(method, _url);
                }
                // 设置默认请求头
                // 设置请求头格式为json格式
                xhr.setRequestHeader("Content-Type", "application/json");
                xhr.send(JSON.stringify(data));

                xhr.addEventListener("readystatechange", () => {
                    if (xhr.readyState == 4) {
                        if (xhr.status == 200) {
                            // 返回解析成功结果
                            resolve(JSON.parse(xhr.responseText));
                        } else {
                            // 拒绝
                            reject(JSON.parse(xhr.responseText));
                        }
                    }
                })
            })
        };
        // GET请求
        ajax("http://studentback.dfbuff.xyz/getMethod?type=图片").then(res => {
                console.log(res);
                return ajax("http://studentback.dfbuff.xyz/getMethod?type=冷笑话");
            })
            .then(res => {
                console.log(res);
            })
            .catch(err => {
                console.log(err);
            });
    </script> -->
    <!-- 第 3 题 -->
    <!-- <script>
        // 方法1
        let arr1 = [1, 2, 5, 2, 4, 5, 10, 2, 5, 1, 2, 4, 5, 8, 6, 4];
        console.log(Array.from(new Set(arr1)));

        // 方法2
        let arr2 = [1, 2, 5, 2, 4, 5, 10, 2, 5, 1, 2, 4, 5, 8, 6, 4];
        let newArr2 = [];
        for (let i = 0; i < arr2.length; i++) {
            if (newArr2.indexOf(arr2[i]) == -1) {
                newArr2.push(arr2[i])
            }
        }
        console.log(newArr2);

        //方法3
        let arr3 = [1, 2, 5, 2, 4, 5, 10, 2, 5, 1, 2, 4, 5, 8, 6, 4];
        for (let i = 0; i < arr3.length; i++) {
            for (let j = i + 1; j < arr3.length; j++) {
                if (arr3[i] == arr3[j]) {
                    arr3.splice(j, 1);
                    j--;
                }
            }
        }
        console.log(arr3);

        //方法4
        let arr4 = [1, 2, 5, 2, 4, 5, 10, 2, 5, 1, 2, 4, 5, 8, 6, 4];
        let newArr4 = [];
        for (let i = 0; i < arr4.length; i++) {
            if (!newArr4.includes(arr4[i])) {
                newArr4.push(arr4[i])
            };
        }
        console.log(newArr4);
    </script> -->

</body>

</html>